package com.tanhua.config.template;


import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.tanhua.config.properties.OssProperties;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;

public class OssTemplate {

    private OssProperties ossProperties;

    public OssTemplate(OssProperties ossProperties) {
        this.ossProperties = ossProperties;
    }

    public String upload(String fileName, InputStream inputStream) {
        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。关于其他Region对应的Endpoint信息，请参见访问域名和数据中心。
        //String endpoint = "https://zhujs-tanhua.oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        //String accessKeyId = "yourAccessKeyId";
        //String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称，例如examplebucket。
        //String bucketName = "examplebucket";
        // 填写Object完整路径，例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        //String objectName = "exampledir/exampleobject.txt";
        //拼接完整路径 文件夹路径+随机生成文件名+后缀名
        String objectName = DateUtil.format(new Date(),"yyyy/MM/dd")+"/"+ UUID.randomUUID()+fileName.substring(fileName.lastIndexOf("."));

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndPoint(),ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret());

        // 填写字符串。
        //String content = "Hello OSS";
        
        // 创建PutObjectRequest对象。
        ossClient.putObject(ossProperties.getBucketName(), objectName,inputStream);
        ossClient.shutdown();
        // 如果需要上传时设置存储类型和访问权限，请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);
        // 上传字符串。
        return ossProperties.getUrl()+objectName;

    }
}
